/**	
* @version 3.0
* @package YAKUSOFT.
* @author Jorge Washington Mueses Cevallos.	
* @copyright Copyright (C) 2010 por Jorge Mueses. Todos los derechos reservados.
* @license http://www.gnu.org/copyleft/gpl.html GNU/GPL.
* YAKUSOFT! es un software de libre distribución, que puede ser
* copiado y distribuido bajo los términos de la Licencia Pública
* General GNU, de acuerdo con la publicada por la Free Software
* Foundation, versión 2 de la licencia o cualquier versión posterior.
*/

package ec.com.yaku.seg.filtro;

import java.io.*;
import javax.servlet.*;
import javax.servlet.http.*;
import ec.com.yaku.seg.clases.Usuario;

public class verificaAutenticacion implements Filter{
    private FilterConfig config;
    private String INICIO;
    private String MENSAJE;
    
    private String _ip = null;
    private int _puerto = 5432;
    private String _db = null;
    private String _usuario = null;
    private String _clave = null;  
    
    public void init(FilterConfig config) throws ServletException
    {    
        this._ip = config.getServletContext().getInitParameter("_IP");
        this._puerto = Integer.parseInt(config.getServletContext().getInitParameter("_PUERTO"));
        this._db = config.getServletContext().getInitParameter("_DB");
        this._usuario = config.getServletContext().getInitParameter("_USUARIO");
        this._clave = config.getServletContext().getInitParameter("_CLAVE");
        
        this.config = config;
        //Tambien se pueden cargar los parametros que configura la url de salida
        this.INICIO = config.getInitParameter("Inicio");
        this.MENSAJE = config.getInitParameter("Mensaje");
        /*if(INICIO == null || INICIO.trim().length() == 0) {
            //Error al cargar la página
            throw new ServletException("El tiempo de la sesión ha caducado o ha iniciado sesión desde otro equipo. Por favor, cierre el sistema y vuelva a ingresar.");
        }*/
    }
    
    public void doFilter(ServletRequest req, ServletResponse res, FilterChain chain) throws ServletException, IOException
    {
        HttpServletRequest miReq = (HttpServletRequest)req;
        HttpSession sesion = miReq.getSession(true);
        String usuario = (String)sesion.getAttribute("usuario");
        usuario = (usuario!=null) ? usuario : "";
        if(usuario.compareTo("")!=0){
            Usuario us = new Usuario(this._ip, this._puerto, this._db, this._usuario, this._clave);
            if(sesion.getId().compareTo(us.getSesion(usuario))==0){
                chain.doFilter(req, res);
            }else{
                us.setSesion(usuario, "");
                RequestDispatcher dispatcher = req.getRequestDispatcher("/"+this.MENSAJE);
                dispatcher.forward(req, res);
            }
            us.cerrar();
        }else{
            ((HttpServletResponse)res).sendRedirect(((HttpServletRequest)req).getContextPath() + "/" + this.INICIO);
        }
    }
    
    public void destroy() {
        config = null;
    }
}
